//axios二次封装
//1.利用axios请求,响应拦截器功能
//2.请求拦截器,可以在请求头中携带公共参数:token
//3.相应拦截器,可以简化服务器返回的数据,处理http网络错误
import axios from 'axios'
import { ElMessage } from 'element-plus'
import useUserStore from '@/store/modules/user'

//利用axios.create方法创建一个axios实例：可以设置基础路径，超出时间的设置
const request = axios.create({
  baseURL: '/api',
  timeout: 5000
})

//请求拦截器
request.interceptors.request.use((config) => {
  //获取用户仓库
  let userStore = useUserStore()
  //token：公共参数，如果用户登录了，需要在请求头中需要携带token。否则服务器不知道登没登陆就不会给数据
  if (userStore.userInfo.token) {
    config.headers.token = userStore.userInfo.token
  }
  //config:请求拦截器回调注入的对象(配置对象)，配置对象的身上最终要的一件事情headers属性。可以通过请求头携带公共参数-token
  return config
})
//相应拦截器
request.interceptors.response.use((response) => {
  //简化数据
  return response
}, (error) => {
  //处理http网络错误
  let status = error.response.status
  switch (status) {
    case 401:
      ElMessage({
        type: 'error',
        message: '参数有误'
      })
      break;
    case 404:
      ElMessage({
        type: 'error',
        message: '请求失败路径出现问题'
      })
      break;
    case 500 | 501 | 502 | 503 | 504 | 505:
      ElMessage({
        type: 'error',
        message: '服务器挂了'
      })
      break;
  }
  return Promise.reject(new Error(error.message))
})

//对外暴露
export default request